home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / drivers / media / dvb / frontends / af9013_priv.h next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  21.0 KB  |  870 lines

  1. /*
  2.  * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
  3.  *
  4.  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
  5.  *
  6.  * Thanks to Afatech who kindly provided information.
  7.  *
  8.  *    This program is free software; you can redistribute it and/or modify
  9.  *    it under the terms of the GNU General Public License as published by
  10.  *    the Free Software Foundation; either version 2 of the License, or
  11.  *    (at your option) any later version.
  12.  *
  13.  *    This program is distributed in the hope that it will be useful,
  14.  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *    GNU General Public License for more details.
  17.  *
  18.  *    You should have received a copy of the GNU General Public License
  19.  *    along with this program; if not, write to the Free Software
  20.  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  *
  22.  */
  23.  
  24. #ifndef _AF9013_PRIV_
  25. #define _AF9013_PRIV_
  26.  
  27. #define LOG_PREFIX "af9013"
  28. extern int af9013_debug;
  29.  
  30. #define dprintk(var, level, args...) \
  31.         do { if ((var & level)) printk(args); } while (0)
  32.  
  33. #define debug_dump(b, l, func) {\
  34.     int loop_; \
  35.     for (loop_ = 0; loop_ < l; loop_++) \
  36.         func("%02x ", b[loop_]); \
  37.     func("\n");\
  38. }
  39.  
  40. #define deb_info(args...) dprintk(af9013_debug, 0x01, args)
  41.  
  42. #undef err
  43. #define err(f, arg...)  printk(KERN_ERR     LOG_PREFIX": " f "\n" , ## arg)
  44. #undef info
  45. #define info(f, arg...) printk(KERN_INFO    LOG_PREFIX": " f "\n" , ## arg)
  46. #undef warn
  47. #define warn(f, arg...) printk(KERN_WARNING LOG_PREFIX": " f "\n" , ## arg)
  48.  
  49. #define AF9013_DEFAULT_FIRMWARE     "dvb-fe-af9013.fw"
  50.  
  51. struct regdesc {
  52.     u16 addr;
  53.     u8  pos:4;
  54.     u8  len:4;
  55.     u8  val;
  56. };
  57.  
  58. struct snr_table {
  59.     u32 val;
  60.     u8 snr;
  61. };
  62.  
  63. /* QPSK SNR lookup table */
  64. static struct snr_table qpsk_snr_table[] = {
  65.     { 0x0b4771,  0 },
  66.     { 0x0c1aed,  1 },
  67.     { 0x0d0d27,  2 },
  68.     { 0x0e4d19,  3 },
  69.     { 0x0e5da8,  4 },
  70.     { 0x107097,  5 },
  71.     { 0x116975,  6 },
  72.     { 0x1252d9,  7 },
  73.     { 0x131fa4,  8 },
  74.     { 0x13d5e1,  9 },
  75.     { 0x148e53, 10 },
  76.     { 0x15358b, 11 },
  77.     { 0x15dd29, 12 },
  78.     { 0x168112, 13 },
  79.     { 0x170b61, 14 },
  80.     { 0xffffff, 15 },
  81. };
  82.  
  83. /* QAM16 SNR lookup table */
  84. static struct snr_table qam16_snr_table[] = {
  85.     { 0x05eb62,  5 },
  86.     { 0x05fecf,  6 },
  87.     { 0x060b80,  7 },
  88.     { 0x062501,  8 },
  89.     { 0x064865,  9 },
  90.     { 0x069604, 10 },
  91.     { 0x06f356, 11 },
  92.     { 0x07706a, 12 },
  93.     { 0x0804d3, 13 },
  94.     { 0x089d1a, 14 },
  95.     { 0x093e3d, 15 },
  96.     { 0x09e35d, 16 },
  97.     { 0x0a7c3c, 17 },
  98.     { 0x0afaf8, 18 },
  99.     { 0x0b719d, 19 },
  100.     { 0xffffff, 20 },
  101. };
  102.  
  103. /* QAM64 SNR lookup table */
  104. static struct snr_table qam64_snr_table[] = {
  105.     { 0x03109b, 12 },
  106.     { 0x0310d4, 13 },
  107.     { 0x031920, 14 },
  108.     { 0x0322d0, 15 },
  109.     { 0x0339fc, 16 },
  110.     { 0x0364a1, 17 },
  111.     { 0x038bcc, 18 },
  112.     { 0x03c7d3, 19 },
  113.     { 0x0408cc, 20 },
  114.     { 0x043bed, 21 },
  115.     { 0x048061, 22 },
  116.     { 0x04be95, 23 },
  117.     { 0x04fa7d, 24 },
  118.     { 0x052405, 25 },
  119.     { 0x05570d, 26 },
  120.     { 0xffffff, 27 },
  121. };
  122.  
  123. static struct regdesc ofsm_init[] = {
  124.     { 0xd73a, 0, 8, 0xa1 },
  125.     { 0xd73b, 0, 8, 0x1f },
  126.     { 0xd73c, 4, 4, 0x0a },
  127.     { 0xd732, 3, 1, 0x00 },
  128.     { 0xd731, 4, 2, 0x03 },
  129.     { 0xd73d, 7, 1, 0x01 },
  130.     { 0xd740, 0, 1, 0x00 },
  131.     { 0xd740, 1, 1, 0x00 },
  132.     { 0xd740, 2, 1, 0x00 },
  133.     { 0xd740, 3, 1, 0x01 },
  134.     { 0xd3c1, 4, 1, 0x01 },
  135.     { 0xd3a2, 0, 8, 0x00 },
  136.     { 0xd3a3, 0, 8, 0x04 },
  137.     { 0xd305, 0, 8, 0x32 },
  138.     { 0xd306, 0, 8, 0x10 },
  139.     { 0xd304, 0, 8, 0x04 },
  140.     { 0x9112, 0, 1, 0x01 },
  141.     { 0x911d, 0, 1, 0x01 },
  142.     { 0x911a, 0, 1, 0x01 },
  143.     { 0x911b, 0, 1, 0x01 },
  144.     { 0x9bce, 0, 4, 0x02 },
  145.     { 0x9116, 0, 1, 0x01 },
  146.     { 0x9bd1, 0, 1, 0x01 },
  147.     { 0xd2e0, 0, 8, 0xd0 },
  148.     { 0xd2e9, 0, 4, 0x0d },
  149.     { 0xd38c, 0, 8, 0xfc },
  150.     { 0xd38d, 0, 8, 0x00 },
  151.     { 0xd38e, 0, 8, 0x7e },
  152.     { 0xd38f, 0, 8, 0x00 },
  153.     { 0xd390, 0, 8, 0x2f },
  154.     { 0xd145, 4, 1, 0x01 },
  155.     { 0xd1a9, 4, 1, 0x01 },
  156.     { 0xd158, 5, 3, 0x01 },
  157.     { 0xd159, 0, 6, 0x06 },
  158.     { 0xd167, 0, 8, 0x00 },
  159.     { 0xd168, 0, 4, 0x07 },
  160.     { 0xd1c3, 5, 3, 0x00 },
  161.     { 0xd1c4, 0, 6, 0x00 },
  162.     { 0xd1c5, 0, 7, 0x10 },
  163.     { 0xd1c6, 0, 3, 0x02 },
  164.     { 0xd080, 2, 5, 0x03 },
  165.     { 0xd081, 4, 4, 0x09 },
  166.     { 0xd098, 4, 4, 0x0f },
  167.     { 0xd098, 0, 4, 0x03 },
  168.     { 0xdbc0, 3, 1, 0x01 },
  169.     { 0xdbc0, 4, 1, 0x01 },
  170.     { 0xdbc7, 0, 8, 0x08 },
  171.     { 0xdbc8, 4, 4, 0x00 },
  172.     { 0xdbc9, 0, 5, 0x01 },
  173.     { 0xd280, 0, 8, 0xe0 },
  174.     { 0xd281, 0, 8, 0xff },
  175.     { 0xd282, 0, 8, 0xff },
  176.     { 0xd283, 0, 8, 0xc3 },
  177.     { 0xd284, 0, 8, 0xff },
  178.     { 0xd285, 0, 4, 0x01 },
  179.     { 0xd0f0, 0, 7, 0x1a },
  180.     { 0xd0f1, 4, 1, 0x01 },
  181.     { 0xd0f2, 0, 8, 0x0c },
  182.     { 0xd103, 0, 4, 0x08 },
  183.     { 0xd0f8, 0, 7, 0x20 },
  184.     { 0xd111, 5, 1, 0x00 },
  185.     { 0xd111, 6, 1, 0x00 },
  186.     { 0x910b, 0, 8, 0x0a },
  187.     { 0x9115, 0, 8, 0x02 },
  188.     { 0x910c, 0, 8, 0x02 },
  189.     { 0x910d, 0, 8, 0x08 },
  190.     { 0x910e, 0, 8, 0x0a },
  191.     { 0x9bf6, 0, 8, 0x06 },
  192.     { 0x9bf8, 0, 8, 0x02 },
  193.     { 0x9bf7, 0, 8, 0x05 },
  194.     { 0x9bf9, 0, 8, 0x0f },
  195.     { 0x9bfc, 0, 8, 0x13 },
  196.     { 0x9bd3, 0, 8, 0xff },
  197.     { 0x9bbe, 0, 1, 0x01 },
  198.     { 0x9bcc, 0, 1, 0x01 },
  199. };
  200.  
  201. /* Panasonic ENV77H11D5 tuner init
  202.    AF9013_TUNER_ENV77H11D5 = 129 */
  203. static struct regdesc tuner_init_env77h11d5[] = {
  204.     { 0x9bd5, 0, 8, 0x01 },
  205.     { 0x9bd6, 0, 8, 0x03 },
  206.     { 0x9bbe, 0, 8, 0x01 },
  207.     { 0xd1a0, 1, 1, 0x01 },
  208.     { 0xd000, 0, 1, 0x01 },
  209.     { 0xd000, 1, 1, 0x00 },
  210.     { 0xd001, 1, 1, 0x01 },
  211.     { 0xd001, 0, 1, 0x00 },
  212.     { 0xd001, 5, 1, 0x00 },
  213.     { 0xd002, 0, 5, 0x19 },
  214.     { 0xd003, 0, 5, 0x1a },
  215.     { 0xd004, 0, 5, 0x19 },
  216.     { 0xd005, 0, 5, 0x1a },
  217.     { 0xd00e, 0, 5, 0x10 },
  218.     { 0xd00f, 0, 3, 0x04 },
  219.     { 0xd00f, 3, 3, 0x05 },
  220.     { 0xd010, 0, 3, 0x04 },
  221.     { 0xd010, 3, 3, 0x05 },
  222.     { 0xd016, 4, 4, 0x03 },
  223.     { 0xd01f, 0, 6, 0x0a },
  224.     { 0xd020, 0, 6, 0x0a },
  225.     { 0x9bda, 0, 8, 0x00 },
  226.     { 0x9be3, 0, 8, 0x00 },
  227.     { 0xd015, 0, 8, 0x50 },
  228.     { 0xd016, 0, 1, 0x00 },
  229.     { 0xd044, 0, 8, 0x46 },
  230.     { 0xd045, 0, 1, 0x00 },
  231.     { 0xd008, 0, 8, 0xdf },
  232.     { 0xd009, 0, 2, 0x02 },
  233.     { 0xd006, 0, 8, 0x44 },
  234.     { 0xd007, 0, 2, 0x01 },
  235.     { 0xd00c, 0, 8, 0xeb },
  236.     { 0xd00d, 0, 2, 0x02 },
  237.     { 0xd00a, 0, 8, 0xf4 },
  238.     { 0xd00b, 0, 2, 0x01 },
  239.     { 0x9bba, 0, 8, 0xf9 },
  240.     { 0x9bc3, 0, 8, 0xdf },
  241.     { 0x9bc4, 0, 8, 0x02 },
  242.     { 0x9bc5, 0, 8, 0xeb },
  243.     { 0x9bc6, 0, 8, 0x02 },
  244.     { 0x9bc9, 0, 8, 0x52 },
  245.     { 0xd011, 0, 8, 0x3c },
  246.     { 0xd012, 0, 2, 0x01 },
  247.     { 0xd013, 0, 8, 0xf7 },
  248.     { 0xd014, 0, 2, 0x02 },
  249.     { 0xd040, 0, 8, 0x0b },
  250.     { 0xd041, 0, 2, 0x02 },
  251.     { 0xd042, 0, 8, 0x4d },
  252.     { 0xd043, 0, 2, 0x00 },
  253.     { 0xd045, 1, 1, 0x00 },
  254.     { 0x9bcf, 0, 1, 0x01 },
  255.     { 0xd045, 2, 1, 0x01 },
  256.     { 0xd04f, 0, 8, 0x9a },
  257.     { 0xd050, 0, 1, 0x01 },
  258.     { 0xd051, 0, 8, 0x5a },
  259.     { 0xd052, 0, 1, 0x01 },
  260.     { 0xd053, 0, 8, 0x50 },
  261.     { 0xd054, 0, 8, 0x46 },
  262.     { 0x9bd7, 0, 8, 0x0a },
  263.     { 0x9bd8, 0, 8, 0x14 },
  264.     { 0x9bd9, 0, 8, 0x08 },
  265. };
  266.  
  267. /* Microtune MT2060 tuner init
  268.    AF9013_TUNER_MT2060     = 130 */
  269. static struct regdesc tuner_init_mt2060[] = {
  270.     { 0x9bd5, 0, 8, 0x01 },
  271.     { 0x9bd6, 0, 8, 0x07 },
  272.     { 0xd1a0, 1, 1, 0x01 },
  273.     { 0xd000, 0, 1, 0x01 },
  274.     { 0xd000, 1, 1, 0x00 },
  275.     { 0xd001, 1, 1, 0x01 },
  276.     { 0xd001, 0, 1, 0x00 },
  277.     { 0xd001, 5, 1, 0x00 },
  278.     { 0xd002, 0, 5, 0x19 },
  279.     { 0xd003, 0, 5, 0x1a },
  280.     { 0xd004, 0, 5, 0x19 },
  281.     { 0xd005, 0, 5, 0x1a },
  282.     { 0xd00e, 0, 5, 0x10 },
  283.     { 0xd00f, 0, 3, 0x04 },
  284.     { 0xd00f, 3, 3, 0x05 },
  285.     { 0xd010, 0, 3, 0x04 },
  286.     { 0xd010, 3, 3, 0x05 },
  287.     { 0xd016, 4, 4, 0x03 },
  288.     { 0xd01f, 0, 6, 0x0a },
  289.     { 0xd020, 0, 6, 0x0a },
  290.     { 0x9bda, 0, 8, 0x00 },
  291.     { 0x9be3, 0, 8, 0x00 },
  292.     { 0x9bbe, 0, 1, 0x00 },
  293.     { 0x9bcc, 0, 1, 0x00 },
  294.     { 0x9bb9, 0, 8, 0x75 },
  295.     { 0x9bcd, 0, 8, 0x24 },
  296.     { 0x9bff, 0, 8, 0x30 },
  297.     { 0xd015, 0, 8, 0x46 },
  298.     { 0xd016, 0, 1, 0x00 },
  299.     { 0xd044, 0, 8, 0x46 },
  300.     { 0xd045, 0, 1, 0x00 },
  301.     { 0xd008, 0, 8, 0x0f },
  302.     { 0xd009, 0, 2, 0x02 },
  303.     { 0xd006, 0, 8, 0x32 },
  304.     { 0xd007, 0, 2, 0x01 },
  305.     { 0xd00c, 0, 8, 0x36 },
  306.     { 0xd00d, 0, 2, 0x03 },
  307.     { 0xd00a, 0, 8, 0x35 },
  308.     { 0xd00b, 0, 2, 0x01 },
  309.     { 0x9bc7, 0, 8, 0x07 },
  310.     { 0x9bc8, 0, 8, 0x90 },
  311.     { 0x9bc3, 0, 8, 0x0f },
  312.     { 0x9bc4, 0, 8, 0x02 },
  313.     { 0x9bc5, 0, 8, 0x36 },
  314.     { 0x9bc6, 0, 8, 0x03 },
  315.     { 0x9bba, 0, 8, 0xc9 },
  316.     { 0x9bc9, 0, 8, 0x79 },
  317.     { 0xd011, 0, 8, 0x10 },
  318.     { 0xd012, 0, 2, 0x01 },
  319.     { 0xd013, 0, 8, 0x45 },
  320.     { 0xd014, 0, 2, 0x03 },
  321.     { 0xd040, 0, 8, 0x98 },
  322.     { 0xd041, 0, 2, 0x00 },
  323.     { 0xd042, 0, 8, 0xcf },
  324.     { 0xd043, 0, 2, 0x03 },
  325.     { 0xd045, 1, 1, 0x00 },
  326.     { 0x9bcf, 0, 1, 0x01 },
  327.     { 0xd045, 2, 1, 0x01 },
  328.     { 0xd04f, 0, 8, 0x9a },
  329.     { 0xd050, 0, 1, 0x01 },
  330.     { 0xd051, 0, 8, 0x5a },
  331.     { 0xd052, 0, 1, 0x01 },
  332.     { 0xd053, 0, 8, 0x50 },
  333.     { 0xd054, 0, 8, 0x46 },
  334.     { 0x9bd7, 0, 8, 0x0a },
  335.     { 0x9bd8, 0, 8, 0x14 },
  336.     { 0x9bd9, 0, 8, 0x08 },
  337.     { 0x9bd0, 0, 8, 0xcc },
  338.     { 0x9be4, 0, 8, 0xa0 },
  339.     { 0x9bbd, 0, 8, 0x8e },
  340.     { 0x9be2, 0, 8, 0x4d },
  341.     { 0x9bee, 0, 1, 0x01 },
  342. };
  343.  
  344. /* Microtune MT2060 tuner init
  345.    AF9013_TUNER_MT2060_2   = 147 */
  346. static struct regdesc tuner_init_mt2060_2[] = {
  347.     { 0x9bd5, 0, 8, 0x01 },
  348.     { 0x9bd6, 0, 8, 0x06 },
  349.     { 0x9bbe, 0, 8, 0x01 },
  350.     { 0xd1a0, 1, 1, 0x01 },
  351.     { 0xd000, 0, 1, 0x01 },
  352.     { 0xd000, 1, 1, 0x00 },
  353.     { 0xd001, 1, 1, 0x01 },
  354.     { 0xd001, 0, 1, 0x00 },
  355.     { 0xd001, 5, 1, 0x00 },
  356.     { 0xd002, 0, 5, 0x19 },
  357.     { 0xd003, 0, 5, 0x1a },
  358.     { 0xd004, 0, 5, 0x19 },
  359.     { 0xd005, 0, 5, 0x1a },
  360.     { 0xd00e, 0, 5, 0x10 },
  361.     { 0xd00f, 0, 3, 0x04 },
  362.     { 0xd00f, 3, 3, 0x05 },
  363.     { 0xd010, 0, 3, 0x04 },
  364.     { 0xd010, 3, 3, 0x05 },
  365.     { 0xd016, 4, 4, 0x03 },
  366.     { 0xd01f, 0, 6, 0x0a },
  367.     { 0xd020, 0, 6, 0x0a },
  368.     { 0xd015, 0, 8, 0x46 },
  369.     { 0xd016, 0, 1, 0x00 },
  370.     { 0xd044, 0, 8, 0x46 },
  371.     { 0xd045, 0, 1, 0x00 },
  372.     { 0xd008, 0, 8, 0x0f },
  373.     { 0xd009, 0, 2, 0x02 },
  374.     { 0xd006, 0, 8, 0x32 },
  375.     { 0xd007, 0, 2, 0x01 },
  376.     { 0xd00c, 0, 8, 0x36 },
  377.     { 0xd00d, 0, 2, 0x03 },
  378.     { 0xd00a, 0, 8, 0x35 },
  379.     { 0xd00b, 0, 2, 0x01 },
  380.     { 0x9bc7, 0, 8, 0x07 },
  381.     { 0x9bc8, 0, 8, 0x90 },
  382.     { 0x9bc3, 0, 8, 0x0f },
  383.     { 0x9bc4, 0, 8, 0x02 },
  384.     { 0x9bc5, 0, 8, 0x36 },
  385.     { 0x9bc6, 0, 8, 0x03 },
  386.     { 0x9bba, 0, 8, 0xc9 },
  387.     { 0x9bc9, 0, 8, 0x79 },
  388.     { 0xd011, 0, 8, 0x10 },
  389.     { 0xd012, 0, 2, 0x01 },
  390.     { 0xd013, 0, 8, 0x45 },
  391.     { 0xd014, 0, 2, 0x03 },
  392.     { 0xd040, 0, 8, 0x98 },
  393.     { 0xd041, 0, 2, 0x00 },
  394.     { 0xd042, 0, 8, 0xcf },
  395.     { 0xd043, 0, 2, 0x03 },
  396.     { 0xd045, 1, 1, 0x00 },
  397.     { 0x9bcf, 0, 8, 0x01 },
  398.     { 0xd045, 2, 1, 0x01 },
  399.     { 0xd04f, 0, 8, 0x9a },
  400.     { 0xd050, 0, 1, 0x01 },
  401.     { 0xd051, 0, 8, 0x5a },
  402.     { 0xd052, 0, 1, 0x01 },
  403.     { 0xd053, 0, 8, 0x96 },
  404.     { 0xd054, 0, 8, 0x46 },
  405.     { 0xd045, 7, 1, 0x00 },
  406.     { 0x9bd7, 0, 8, 0x0a },
  407.     { 0x9bd8, 0, 8, 0x14 },
  408.     { 0x9bd9, 0, 8, 0x08 },
  409. };
  410.  
  411. /* MaxLinear MXL5003 tuner init
  412.    AF9013_TUNER_MXL5003D   =   3 */
  413. static struct regdesc tuner_init_mxl5003d[] = {
  414.     { 0x9bd5, 0, 8, 0x01 },
  415.     { 0x9bd6, 0, 8, 0x09 },
  416.     { 0xd1a0, 1, 1, 0x01 },
  417.     { 0xd000, 0, 1, 0x01 },
  418.     { 0xd000, 1, 1, 0x00 },
  419.     { 0xd001, 1, 1, 0x01 },
  420.     { 0xd001, 0, 1, 0x00 },
  421.     { 0xd001, 5, 1, 0x00 },
  422.     { 0xd002, 0, 5, 0x19 },
  423.     { 0xd003, 0, 5, 0x1a },
  424.     { 0xd004, 0, 5, 0x19 },
  425.     { 0xd005, 0, 5, 0x1a },
  426.     { 0xd00e, 0, 5, 0x10 },
  427.     { 0xd00f, 0, 3, 0x04 },
  428.     { 0xd00f, 3, 3, 0x05 },
  429.     { 0xd010, 0, 3, 0x04 },
  430.     { 0xd010, 3, 3, 0x05 },
  431.     { 0xd016, 4, 4, 0x03 },
  432.     { 0xd01f, 0, 6, 0x0a },
  433.     { 0xd020, 0, 6, 0x0a },
  434.     { 0x9bda, 0, 8, 0x00 },
  435.     { 0x9be3, 0, 8, 0x00 },
  436.     { 0x9bfc, 0, 8, 0x0f },
  437.     { 0x9bf6, 0, 8, 0x01 },
  438.     { 0x9bbe, 0, 1, 0x01 },
  439.     { 0xd015, 0, 8, 0x33 },
  440.     { 0xd016, 0, 1, 0x00 },
  441.     { 0xd044, 0, 8, 0x40 },
  442.     { 0xd045, 0, 1, 0x00 },
  443.     { 0xd008, 0, 8, 0x0f },
  444.     { 0xd009, 0, 2, 0x02 },
  445.     { 0xd006, 0, 8, 0x6c },
  446.     { 0xd007, 0, 2, 0x00 },
  447.     { 0xd00c, 0, 8, 0x3d },
  448.     { 0xd00d, 0, 2, 0x00 },
  449.     { 0xd00a, 0, 8, 0x45 },
  450.     { 0xd00b, 0, 2, 0x01 },
  451.     { 0x9bc7, 0, 8, 0x07 },
  452.     { 0x9bc8, 0, 8, 0x52 },
  453.     { 0x9bc3, 0, 8, 0x0f },
  454.     { 0x9bc4, 0, 8, 0x02 },
  455.     { 0x9bc5, 0, 8, 0x3d },
  456.     { 0x9bc6, 0, 8, 0x00 },
  457.     { 0x9bba, 0, 8, 0xa2 },
  458.     { 0x9bc9, 0, 8, 0xa0 },
  459.     { 0xd011, 0, 8, 0x56 },
  460.     { 0xd012, 0, 2, 0x00 },
  461.     { 0xd013, 0, 8, 0x50 },
  462.     { 0xd014, 0, 2, 0x00 },
  463.     { 0xd040, 0, 8, 0x56 },
  464.     { 0xd041, 0, 2, 0x00 },
  465.     { 0xd042, 0, 8, 0x50 },
  466.     { 0xd043, 0, 2, 0x00 },
  467.     { 0xd045, 1, 1, 0x00 },
  468.     { 0x9bcf, 0, 8, 0x01 },
  469.     { 0xd045, 2, 1, 0x01 },
  470.     { 0xd04f, 0, 8, 0x9a },
  471.     { 0xd050, 0, 1, 0x01 },
  472.     { 0xd051, 0, 8, 0x5a },
  473.     { 0xd052, 0, 1, 0x01 },
  474.     { 0xd053, 0, 8, 0x50 },
  475.     { 0xd054, 0, 8, 0x46 },
  476.     { 0x9bd7, 0, 8, 0x0a },
  477.     { 0x9bd8, 0, 8, 0x14 },
  478.     { 0x9bd9, 0, 8, 0x08 },
  479. };
  480.  
  481. /* MaxLinear MXL5005 tuner init
  482.    AF9013_TUNER_MXL5005D   =  13
  483.    AF9013_TUNER_MXL5005R   =  30 */
  484. static struct regdesc tuner_init_mxl5005[] = {
  485.     { 0x9bd5, 0, 8, 0x01 },
  486.     { 0x9bd6, 0, 8, 0x07 },
  487.     { 0xd1a0, 1, 1, 0x01 },
  488.     { 0xd000, 0, 1, 0x01 },
  489.     { 0xd000, 1, 1, 0x00 },
  490.     { 0xd001, 1, 1, 0x01 },
  491.     { 0xd001, 0, 1, 0x00 },
  492.     { 0xd001, 5, 1, 0x00 },
  493.     { 0xd002, 0, 5, 0x19 },
  494.     { 0xd003, 0, 5, 0x1a },
  495.     { 0xd004, 0, 5, 0x19 },
  496.     { 0xd005, 0, 5, 0x1a },
  497.     { 0xd00e, 0, 5, 0x10 },
  498.     { 0xd00f, 0, 3, 0x04 },
  499.     { 0xd00f, 3, 3, 0x05 },
  500.     { 0xd010, 0, 3, 0x04 },
  501.     { 0xd010, 3, 3, 0x05 },
  502.     { 0xd016, 4, 4, 0x03 },
  503.     { 0xd01f, 0, 6, 0x0a },
  504.     { 0xd020, 0, 6, 0x0a },
  505.     { 0x9bda, 0, 8, 0x01 },
  506.     { 0x9be3, 0, 8, 0x01 },
  507.     { 0x9bbe, 0, 1, 0x01 },
  508.     { 0x9bcc, 0, 1, 0x01 },
  509.     { 0x9bb9, 0, 8, 0x00 },
  510.     { 0x9bcd, 0, 8, 0x28 },
  511.     { 0x9bff, 0, 8, 0x24 },
  512.     { 0xd015, 0, 8, 0x40 },
  513.     { 0xd016, 0, 1, 0x00 },
  514.     { 0xd044, 0, 8, 0x40 },
  515.     { 0xd045, 0, 1, 0x00 },
  516.     { 0xd008, 0, 8, 0x0f },
  517.     { 0xd009, 0, 2, 0x02 },
  518.     { 0xd006, 0, 8, 0x73 },
  519.     { 0xd007, 0, 2, 0x01 },
  520.     { 0xd00c, 0, 8, 0xfa },
  521.     { 0xd00d, 0, 2, 0x01 },
  522.     { 0xd00a, 0, 8, 0xff },
  523.     { 0xd00b, 0, 2, 0x01 },
  524.     { 0x9bc7, 0, 8, 0x23 },
  525.     { 0x9bc8, 0, 8, 0x55 },
  526.     { 0x9bc3, 0, 8, 0x01 },
  527.     { 0x9bc4, 0, 8, 0x02 },
  528.     { 0x9bc5, 0, 8, 0xfa },
  529.     { 0x9bc6, 0, 8, 0x01 },
  530.     { 0x9bba, 0, 8, 0xff },
  531.     { 0x9bc9, 0, 8, 0xff },
  532.     { 0x9bd3, 0, 8, 0x95 },
  533.     { 0xd011, 0, 8, 0x70 },
  534.     { 0xd012, 0, 2, 0x01 },
  535.     { 0xd013, 0, 8, 0xfb },
  536.     { 0xd014, 0, 2, 0x01 },
  537.     { 0xd040, 0, 8, 0x70 },
  538.     { 0xd041, 0, 2, 0x01 },
  539.     { 0xd042, 0, 8, 0xfb },
  540.     { 0xd043, 0, 2, 0x01 },
  541.     { 0xd045, 1, 1, 0x00 },
  542.     { 0x9bcf, 0, 1, 0x01 },
  543.     { 0xd045, 2, 1, 0x01 },
  544.     { 0xd04f, 0, 8, 0x9a },
  545.     { 0xd050, 0, 1, 0x01 },
  546.     { 0xd051, 0, 8, 0x5a },
  547.     { 0xd052, 0, 1, 0x01 },
  548.     { 0xd053, 0, 8, 0x50 },
  549.     { 0xd054, 0, 8, 0x46 },
  550.     { 0x9bd7, 0, 8, 0x0a },
  551.     { 0x9bd8, 0, 8, 0x14 },
  552.     { 0x9bd9, 0, 8, 0x08 },
  553.     { 0x9bd0, 0, 8, 0x93 },
  554.     { 0x9be4, 0, 8, 0xfe },
  555.     { 0x9bbd, 0, 8, 0x63 },
  556.     { 0x9be2, 0, 8, 0xfe },
  557.     { 0x9bee, 0, 1, 0x01 },
  558. };
  559.  
  560. /* Quantek QT1010 tuner init
  561.    AF9013_TUNER_QT1010     = 134
  562.    AF9013_TUNER_QT1010A    = 162 */
  563. static struct regdesc tuner_init_qt1010[] = {
  564.     { 0x9bd5, 0, 8, 0x01 },
  565.     { 0x9bd6, 0, 8, 0x09 },
  566.     { 0xd1a0, 1, 1, 0x01 },
  567.     { 0xd000, 0, 1, 0x01 },
  568.     { 0xd000, 1, 1, 0x00 },
  569.     { 0xd001, 1, 1, 0x01 },
  570.     { 0xd001, 0, 1, 0x00 },
  571.     { 0xd001, 5, 1, 0x00 },
  572.     { 0xd002, 0, 5, 0x19 },
  573.     { 0xd003, 0, 5, 0x1a },
  574.     { 0xd004, 0, 5, 0x19 },
  575.     { 0xd005, 0, 5, 0x1a },
  576.     { 0xd00e, 0, 5, 0x10 },
  577.     { 0xd00f, 0, 3, 0x04 },
  578.     { 0xd00f, 3, 3, 0x05 },
  579.     { 0xd010, 0, 3, 0x04 },
  580.     { 0xd010, 3, 3, 0x05 },
  581.     { 0xd016, 4, 4, 0x03 },
  582.     { 0xd01f, 0, 6, 0x0a },
  583.     { 0xd020, 0, 6, 0x0a },
  584.     { 0x9bda, 0, 8, 0x01 },
  585.     { 0x9be3, 0, 8, 0x01 },
  586.     { 0xd015, 0, 8, 0x46 },
  587.     { 0xd016, 0, 1, 0x00 },
  588.     { 0xd044, 0, 8, 0x46 },
  589.     { 0xd045, 0, 1, 0x00 },
  590.     { 0x9bbe, 0, 1, 0x01 },
  591.     { 0x9bcc, 0, 1, 0x01 },
  592.     { 0x9bb9, 0, 8, 0x00 },
  593.     { 0x9bcd, 0, 8, 0x28 },
  594.     { 0x9bff, 0, 8, 0x20 },
  595.     { 0xd008, 0, 8, 0x0f },
  596.     { 0xd009, 0, 2, 0x02 },
  597.     { 0xd006, 0, 8, 0x99 },
  598.     { 0xd007, 0, 2, 0x01 },
  599.     { 0xd00c, 0, 8, 0x0f },
  600.     { 0xd00d, 0, 2, 0x02 },
  601.     { 0xd00a, 0, 8, 0x50 },
  602.     { 0xd00b, 0, 2, 0x01 },
  603.     { 0x9bc7, 0, 8, 0x00 },
  604.     { 0x9bc8, 0, 8, 0x00 },
  605.     { 0x9bc3, 0, 8, 0x0f },
  606.     { 0x9bc4, 0, 8, 0x02 },
  607.     { 0x9bc5, 0, 8, 0x0f },
  608.     { 0x9bc6, 0, 8, 0x02 },
  609.     { 0x9bba, 0, 8, 0xc5 },
  610.     { 0x9bc9, 0, 8, 0xff },
  611.     { 0xd011, 0, 8, 0x58 },
  612.     { 0xd012, 0, 2, 0x02 },
  613.     { 0xd013, 0, 8, 0x89 },
  614.     { 0xd014, 0, 2, 0x01 },
  615.     { 0xd040, 0, 8, 0x58 },
  616.     { 0xd041, 0, 2, 0x02 },
  617.     { 0xd042, 0, 8, 0x89 },
  618.     { 0xd043, 0, 2, 0x01 },
  619.     { 0xd045, 1, 1, 0x00 },
  620.     { 0x9bcf, 0, 1, 0x01 },
  621.     { 0xd045, 2, 1, 0x01 },
  622.     { 0xd04f, 0, 8, 0x9a },
  623.     { 0xd050, 0, 1, 0x01 },
  624.     { 0xd051, 0, 8, 0x5a },
  625.     { 0xd052, 0, 1, 0x01 },
  626.     { 0xd053, 0, 8, 0x50 },
  627.     { 0xd054, 0, 8, 0x46 },
  628.     { 0x9bd7, 0, 8, 0x0a },
  629.     { 0x9bd8, 0, 8, 0x14 },
  630.     { 0x9bd9, 0, 8, 0x08 },
  631.     { 0x9bd0, 0, 8, 0xcd },
  632.     { 0x9be4, 0, 8, 0xbb },
  633.     { 0x9bbd, 0, 8, 0x93 },
  634.     { 0x9be2, 0, 8, 0x80 },
  635.     { 0x9bee, 0, 1, 0x01 },
  636. };
  637.  
  638. /* Freescale MC44S803 tuner init
  639.    AF9013_TUNER_MC44S803   = 133 */
  640. static struct regdesc tuner_init_mc44s803[] = {
  641.     { 0x9bd5, 0, 8, 0x01 },
  642.     { 0x9bd6, 0, 8, 0x06 },
  643.     { 0xd1a0, 1, 1, 0x01 },
  644.     { 0xd000, 0, 1, 0x01 },
  645.     { 0xd000, 1, 1, 0x00 },
  646.     { 0xd001, 1, 1, 0x01 },
  647.     { 0xd001, 0, 1, 0x00 },
  648.     { 0xd001, 5, 1, 0x00 },
  649.     { 0xd002, 0, 5, 0x19 },
  650.     { 0xd003, 0, 5, 0x1a },
  651.     { 0xd004, 0, 5, 0x19 },
  652.     { 0xd005, 0, 5, 0x1a },
  653.     { 0xd00e, 0, 5, 0x10 },
  654.     { 0xd00f, 0, 3, 0x04 },
  655.     { 0xd00f, 3, 3, 0x05 },
  656.     { 0xd010, 0, 3, 0x04 },
  657.     { 0xd010, 3, 3, 0x05 },
  658.     { 0xd016, 4, 4, 0x03 },
  659.     { 0xd01f, 0, 6, 0x0a },
  660.     { 0xd020, 0, 6, 0x0a },
  661.     { 0x9bda, 0, 8, 0x00 },
  662.     { 0x9be3, 0, 8, 0x00 },
  663.     { 0x9bf6, 0, 8, 0x01 },
  664.     { 0x9bf8, 0, 8, 0x02 },
  665.     { 0x9bf9, 0, 8, 0x02 },
  666.     { 0x9bfc, 0, 8, 0x1f },
  667.     { 0x9bbe, 0, 1, 0x01 },
  668.     { 0x9bcc, 0, 1, 0x01 },
  669.     { 0x9bb9, 0, 8, 0x00 },
  670.     { 0x9bcd, 0, 8, 0x24 },
  671.     { 0x9bff, 0, 8, 0x24 },
  672.     { 0xd015, 0, 8, 0x46 },
  673.     { 0xd016, 0, 1, 0x00 },
  674.     { 0xd044, 0, 8, 0x46 },
  675.     { 0xd045, 0, 1, 0x00 },
  676.     { 0xd008, 0, 8, 0x01 },
  677.     { 0xd009, 0, 2, 0x02 },
  678.     { 0xd006, 0, 8, 0x7b },
  679.     { 0xd007, 0, 2, 0x00 },
  680.     { 0xd00c, 0, 8, 0x7c },
  681.     { 0xd00d, 0, 2, 0x02 },
  682.     { 0xd00a, 0, 8, 0xfe },
  683.     { 0xd00b, 0, 2, 0x01 },
  684.     { 0x9bc7, 0, 8, 0x08 },
  685.     { 0x9bc8, 0, 8, 0x9a },
  686.     { 0x9bc3, 0, 8, 0x01 },
  687.     { 0x9bc4, 0, 8, 0x02 },
  688.     { 0x9bc5, 0, 8, 0x7c },
  689.     { 0x9bc6, 0, 8, 0x02 },
  690.     { 0x9bba, 0, 8, 0xfc },
  691.     { 0x9bc9, 0, 8, 0xaa },
  692.     { 0xd011, 0, 8, 0x6b },
  693.     { 0xd012, 0, 2, 0x00 },
  694.     { 0xd013, 0, 8, 0x88 },
  695.     { 0xd014, 0, 2, 0x02 },
  696.     { 0xd040, 0, 8, 0x6b },
  697.     { 0xd041, 0, 2, 0x00 },
  698.     { 0xd042, 0, 8, 0x7c },
  699.     { 0xd043, 0, 2, 0x02 },
  700.     { 0xd045, 1, 1, 0x00 },
  701.     { 0x9bcf, 0, 1, 0x01 },
  702.     { 0xd045, 2, 1, 0x01 },
  703.     { 0xd04f, 0, 8, 0x9a },
  704.     { 0xd050, 0, 1, 0x01 },
  705.     { 0xd051, 0, 8, 0x5a },
  706.     { 0xd052, 0, 1, 0x01 },
  707.     { 0xd053, 0, 8, 0x50 },
  708.     { 0xd054, 0, 8, 0x46 },
  709.     { 0x9bd7, 0, 8, 0x0a },
  710.     { 0x9bd8, 0, 8, 0x14 },
  711.     { 0x9bd9, 0, 8, 0x08 },
  712.     { 0x9bd0, 0, 8, 0x9e },
  713.     { 0x9be4, 0, 8, 0xff },
  714.     { 0x9bbd, 0, 8, 0x9e },
  715.     { 0x9be2, 0, 8, 0x25 },
  716.     { 0x9bee, 0, 1, 0x01 },
  717.     { 0xd73b, 3, 1, 0x00 },
  718. };
  719.  
  720. /* unknown, probably for tin can tuner, tuner init
  721.    AF9013_TUNER_UNKNOWN   = 140 */
  722. static struct regdesc tuner_init_unknown[] = {
  723.     { 0x9bd5, 0, 8, 0x01 },
  724.     { 0x9bd6, 0, 8, 0x02 },
  725.     { 0xd1a0, 1, 1, 0x01 },
  726.     { 0xd000, 0, 1, 0x01 },
  727.     { 0xd000, 1, 1, 0x00 },
  728.     { 0xd001, 1, 1, 0x01 },
  729.     { 0xd001, 0, 1, 0x00 },
  730.     { 0xd001, 5, 1, 0x00 },
  731.     { 0xd002, 0, 5, 0x19 },
  732.     { 0xd003, 0, 5, 0x1a },
  733.     { 0xd004, 0, 5, 0x19 },
  734.     { 0xd005, 0, 5, 0x1a },
  735.     { 0xd00e, 0, 5, 0x10 },
  736.     { 0xd00f, 0, 3, 0x04 },
  737.     { 0xd00f, 3, 3, 0x05 },
  738.     { 0xd010, 0, 3, 0x04 },
  739.     { 0xd010, 3, 3, 0x05 },
  740.     { 0xd016, 4, 4, 0x03 },
  741.     { 0xd01f, 0, 6, 0x0a },
  742.     { 0xd020, 0, 6, 0x0a },
  743.     { 0x9bda, 0, 8, 0x01 },
  744.     { 0x9be3, 0, 8, 0x01 },
  745.     { 0xd1a0, 1, 1, 0x00 },
  746.     { 0x9bbe, 0, 1, 0x01 },
  747.     { 0x9bcc, 0, 1, 0x01 },
  748.     { 0x9bb9, 0, 8, 0x00 },
  749.     { 0x9bcd, 0, 8, 0x18 },
  750.     { 0x9bff, 0, 8, 0x2c },
  751.     { 0xd015, 0, 8, 0x46 },
  752.     { 0xd016, 0, 1, 0x00 },
  753.     { 0xd044, 0, 8, 0x46 },
  754.     { 0xd045, 0, 1, 0x00 },
  755.     { 0xd008, 0, 8, 0xdf },
  756.     { 0xd009, 0, 2, 0x02 },
  757.     { 0xd006, 0, 8, 0x44 },
  758.     { 0xd007, 0, 2, 0x01 },
  759.     { 0xd00c, 0, 8, 0x00 },
  760.     { 0xd00d, 0, 2, 0x02 },
  761.     { 0xd00a, 0, 8, 0xf6 },
  762.     { 0xd00b, 0, 2, 0x01 },
  763.     { 0x9bba, 0, 8, 0xf9 },
  764.     { 0x9bc8, 0, 8, 0xaa },
  765.     { 0x9bc3, 0, 8, 0xdf },
  766.     { 0x9bc4, 0, 8, 0x02 },
  767.     { 0x9bc5, 0, 8, 0x00 },
  768.     { 0x9bc6, 0, 8, 0x02 },
  769.     { 0x9bc9, 0, 8, 0xf0 },
  770.     { 0xd011, 0, 8, 0x3c },
  771.     { 0xd012, 0, 2, 0x01 },
  772.     { 0xd013, 0, 8, 0xf7 },
  773.     { 0xd014, 0, 2, 0x02 },
  774.     { 0xd040, 0, 8, 0x0b },
  775.     { 0xd041, 0, 2, 0x02 },
  776.     { 0xd042, 0, 8, 0x4d },
  777.     { 0xd043, 0, 2, 0x00 },
  778.     { 0xd045, 1, 1, 0x00 },
  779.     { 0x9bcf, 0, 1, 0x01 },
  780.     { 0xd045, 2, 1, 0x01 },
  781.     { 0xd04f, 0, 8, 0x9a },
  782.     { 0xd050, 0, 1, 0x01 },
  783.     { 0xd051, 0, 8, 0x5a },
  784.     { 0xd052, 0, 1, 0x01 },
  785.     { 0xd053, 0, 8, 0x50 },
  786.     { 0xd054, 0, 8, 0x46 },
  787.     { 0x9bd7, 0, 8, 0x0a },
  788.     { 0x9bd8, 0, 8, 0x14 },
  789.     { 0x9bd9, 0, 8, 0x08 },
  790. };
  791.  
  792. /* NXP TDA18271 tuner init
  793.    AF9013_TUNER_TDA18271   = 156 */
  794. static struct regdesc tuner_init_tda18271[] = {
  795.     { 0x9bd5, 0, 8, 0x01 },
  796.     { 0x9bd6, 0, 8, 0x04 },
  797.     { 0xd1a0, 1, 1, 0x01 },
  798.     { 0xd000, 0, 1, 0x01 },
  799.     { 0xd000, 1, 1, 0x00 },
  800.     { 0xd001, 1, 1, 0x01 },
  801.     { 0xd001, 0, 1, 0x00 },
  802.     { 0xd001, 5, 1, 0x00 },
  803.     { 0xd002, 0, 5, 0x19 },
  804.     { 0xd003, 0, 5, 0x1a },
  805.     { 0xd004, 0, 5, 0x19 },
  806.     { 0xd005, 0, 5, 0x1a },
  807.     { 0xd00e, 0, 5, 0x10 },
  808.     { 0xd00f, 0, 3, 0x04 },
  809.     { 0xd00f, 3, 3, 0x05 },
  810.     { 0xd010, 0, 3, 0x04 },
  811.     { 0xd010, 3, 3, 0x05 },
  812.     { 0xd016, 4, 4, 0x03 },
  813.     { 0xd01f, 0, 6, 0x0a },
  814.     { 0xd020, 0, 6, 0x0a },
  815.     { 0x9bda, 0, 8, 0x01 },
  816.     { 0x9be3, 0, 8, 0x01 },
  817.     { 0xd1a0, 1, 1, 0x00 },
  818.     { 0x9bbe, 0, 1, 0x01 },
  819.     { 0x9bcc, 0, 1, 0x01 },
  820.     { 0x9bb9, 0, 8, 0x00 },
  821.     { 0x9bcd, 0, 8, 0x18 },
  822.     { 0x9bff, 0, 8, 0x2c },
  823.     { 0xd015, 0, 8, 0x46 },
  824.     { 0xd016, 0, 1, 0x00 },
  825.     { 0xd044, 0, 8, 0x46 },
  826.     { 0xd045, 0, 1, 0x00 },
  827.     { 0xd008, 0, 8, 0xdf },
  828.     { 0xd009, 0, 2, 0x02 },
  829.     { 0xd006, 0, 8, 0x44 },
  830.     { 0xd007, 0, 2, 0x01 },
  831.     { 0xd00c, 0, 8, 0x00 },
  832.     { 0xd00d, 0, 2, 0x02 },
  833.     { 0xd00a, 0, 8, 0xf6 },
  834.     { 0xd00b, 0, 2, 0x01 },
  835.     { 0x9bba, 0, 8, 0xf9 },
  836.     { 0x9bc8, 0, 8, 0xaa },
  837.     { 0x9bc3, 0, 8, 0xdf },
  838.     { 0x9bc4, 0, 8, 0x02 },
  839.     { 0x9bc5, 0, 8, 0x00 },
  840.     { 0x9bc6, 0, 8, 0x02 },
  841.     { 0x9bc9, 0, 8, 0xf0 },
  842.     { 0xd011, 0, 8, 0x3c },
  843.     { 0xd012, 0, 2, 0x01 },
  844.     { 0xd013, 0, 8, 0xf7 },
  845.     { 0xd014, 0, 2, 0x02 },
  846.     { 0xd040, 0, 8, 0x0b },
  847.     { 0xd041, 0, 2, 0x02 },
  848.     { 0xd042, 0, 8, 0x4d },
  849.     { 0xd043, 0, 2, 0x00 },
  850.     { 0xd045, 1, 1, 0x00 },
  851.     { 0x9bcf, 0, 1, 0x01 },
  852.     { 0xd045, 2, 1, 0x01 },
  853.     { 0xd04f, 0, 8, 0x9a },
  854.     { 0xd050, 0, 1, 0x01 },
  855.     { 0xd051, 0, 8, 0x5a },
  856.     { 0xd052, 0, 1, 0x01 },
  857.     { 0xd053, 0, 8, 0x50 },
  858.     { 0xd054, 0, 8, 0x46 },
  859.     { 0x9bd7, 0, 8, 0x0a },
  860.     { 0x9bd8, 0, 8, 0x14 },
  861.     { 0x9bd9, 0, 8, 0x08 },
  862.     { 0x9bd0, 0, 8, 0xa8 },
  863.     { 0x9be4, 0, 8, 0x7f },
  864.     { 0x9bbd, 0, 8, 0xa8 },
  865.     { 0x9be2, 0, 8, 0x20 },
  866.     { 0x9bee, 0, 1, 0x01 },
  867. };
  868.  
  869. #endif /* _AF9013_PRIV_ */
  870.